public class KP {
    public static void main(String[] args) {
        int[] nums = new int[]{3,2,1,5,6,4};
        int k=2;
        System.out.println(findKthLargest(nums,k));
    }

    public static int findKthLargest(int[] str, int k) {
        if(str.length > 0) {
            // 查看数组是否为空
            unckSort(str,0,str.length-1);
        }
        return str[str.length-k];
    }

    private static void unckSort(int[] list, int low, int high) {
        if(low < high) {
            int middle = getMiddle(list,low,high);    // 将list数组一分为二
            unckSort(list,low,middle-1);    // 对低字表进行递归排序
            unckSort(list,middle+1,high);    // 对高字表进行递归排序
        }
    }

    private static int getMiddle(int[] list, int low, int high) {
        int tmp = list[low]; // 数组的第一个值作为中轴（分界点或关键数据）
        while (low < high) {
            while (low < high && list[high] > tmp) {
                high--;
            }
            list[low] = list[high]; // 比中轴小的记录移到低端
            while (low < high && list[low] < tmp) {
                low++;
            }
            list[high] = list[low]; // 比中轴大的记录移到高端
        }
        list[low] = tmp; // 中轴记录到尾
        return low; // 返回中轴的位置
    }

}
